/*
 *  AbstractRenderer.h
 *  GLRender
 *
 *  Created by Patrick zulian on 5/4/10.
 *  Copyright 2010 University  of Lugano. All rights reserved.
 *
 */

#ifndef ABSTRACT_RENDERER_H
#define ABSTRACT_RENDERER_H

#include "Base.h"
#include <QtOpenGL>
#include "ObjReader.h"
#include "Mesh.h"

class Projectile;
class Asteroid;
class WTarget;
class WNode;
class Player;
class GLObject;
class WObject;
class Bonus;

class AbstractRenderer {

public:
	AbstractRenderer()
	{
		
	}

	virtual
	~AbstractRenderer(){}
	
	virtual
	void renderAsteroid(const Asteroid *asteroid) = 0;
	
	virtual
	void renderObjective(const WTarget *objective)=0;
	
	virtual
	void renderCockpit(Player *p)=0;
	
	virtual
	void renderSkyBox()=0;
	
	virtual
	void renderFlash(const RGBd &rgb, const int duration = 20) = 0;
	
	virtual
	void renderCross()=0;
	
	
	virtual
	void renderWNode(const WNode * node) = 0;
	
	static void renderMesh(const char * path);

	
	virtual
	void renderProjectile (const Projectile *p) = 0;
	
	
	virtual
	void render(const GLObject * object) = 0;
	
	virtual
	void defaultTransform(const WObject * object) = 0;
	
	
	virtual
	void setUpAsteroid(GLObject * object) = 0;
	
	virtual
	void setUpPlanet(GLObject * object) = 0;
	
	
	virtual
	void renderBonus (const Bonus *b) = 0;

};

#endif
